package com.tinet.autentia.autentificador.svc;

import java.util.ArrayList;
import java.util.List;

import javax.ejb.Stateless;
import javax.jws.WebService;
import javax.xml.soap.SOAPException;

import org.jboss.wsf.spi.annotation.WebContext;

import cl.tinet.trainee.tarea6.exception.UsuarioNoExisteException;

import com.tinet.autentia.autentificador.model.Usuario;

/**
 * Manejo de Usuarios.
 * 
 * @author FMendoza.
 * 
 */
@Stateless(mappedName = "mibean", name = "mibean")
@WebService(endpointInterface = "com.tinet.trainee.autentia.autentificador.svc.UsuarioWS")
@WebContext(contextRoot = "/usuariows")
public class UsuarioBeanImpl implements UsuarioBean {

    /**
     * Lista de usuarios que se usa como sesion.
     */
    private List<Usuario> usuarios = new ArrayList<Usuario>();

    /**
     * {@inheritDoc}
     */
    public Usuario buscarUsuario(Usuario usuario)
            throws UsuarioNoExisteException {

        Usuario found = null;
        for (Usuario user : usuarios) {
            if (usuario.equals(user)) {
                found = user;
                break;
            }
        }
        if (found == null) {
            throw new UsuarioNoExisteException(UsuarioNoExisteException.EXISTE);
        }

        return found;
    }

    /**
     * {@inheritDoc}
     */
    public boolean agregar(Usuario usuario) {
        boolean res = false;
        try {
            buscarUsuario(usuario);
        } catch (UsuarioNoExisteException e) {
            usuarios.add(usuario);
            res = true;
        }

        return res;
    }

    public List<Usuario> listar() {
        return usuarios;
    }

    public Usuario getError() throws SOAPException {
        throw new SOAPException("Prueba de error",
                new UsuarioNoExisteException(UsuarioNoExisteException.EXISTE));
    }

    public Usuario[] listarWS() {
        return usuarios.toArray(new Usuario[0]);
    }
}
